uint32_t button_press_serial;
GdkWindow *pointer_grab_window;
uint32_t pointer_grab_time;
+ gboolean have_server_repeat;
+ uint32_t server_repeat_rate;
+ uint32_t server_repeat_delay;
guint32 repeat_timer;
guint32 repeat_key;
guint32 repeat_count;
{
gboolean repeat;
- GSettings *keyboard_settings = get_keyboard_settings (device);
-
- if (keyboard_settings)
+ if (device->have_server_repeat)
{
- repeat = g_settings_get_boolean (keyboard_settings, "repeat");
- *delay = g_settings_get_uint (keyboard_settings, "delay");
- *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+ if (device->server_repeat_rate > 0)
+ {
+ repeat = TRUE;
+ *delay = device->server_repeat_delay;
+ *interval = (1000 / device->server_repeat_rate);
+ }
+ else
+ {
+ repeat = FALSE;
+ }
}
else
{
- repeat = TRUE;
- *delay = 400;
- *interval = 80;
+ GSettings *keyboard_settings = get_keyboard_settings (device);
+
+ if (keyboard_settings)
+ {
+ repeat = g_settings_get_boolean (keyboard_settings, "repeat");
+ *delay = g_settings_get_uint (keyboard_settings, "delay");
+ *interval = g_settings_get_uint (keyboard_settings, "repeat-interval");
+ }
+ else
+ {
+ repeat = TRUE;
+ *delay = 400;
+ *interval = 80;
+ }
}
return repeat;
g_signal_emit_by_name (keymap, "direction-changed");
}
+static void
+keyboard_handle_repeat_info (void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t rate,
+ uint32_t delay)
+{
+ GdkWaylandDeviceData *device = data;
+
+ device->have_server_repeat = TRUE;
+ device->server_repeat_rate = rate;
+ device->server_repeat_delay = delay;
+}
+
static GdkWaylandTouchData *
_device_manager_add_touch (GdkWaylandDeviceData *device,
uint32_t id,
keyboard_handle_leave,
keyboard_handle_key,
keyboard_handle_modifiers,
+ keyboard_handle_repeat_info,
};
static const struct wl_touch_listener touch_listener = {
wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
_gdk_wayland_screen_add_output(display_wayland->screen, id, output, MIN (version, 2));
} else if (strcmp(interface, "wl_seat") == 0) {
- seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 3);
+ seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 4);
_gdk_wayland_device_manager_add_seat (gdk_display->device_manager, id, seat);
} else if (strcmp(interface, "wl_data_device_manager") == 0) {
display_wayland->data_device_manager =